package com.vegetable.modules.service.sys;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vegetable.modules.entity.sys.SysMessageEntity;

import java.util.List;
import java.util.Map;

/**
 * 系统消息服务
 *
 * @author Qoder
 */
public interface SysMessageService extends IService<SysMessageEntity> {

    /**
     * 查询用户未读消息数量
     *
     * @param receiverUserId 接收用户ID
     * @return 未读消息数量
     */
    Integer queryUnreadCount(Long receiverUserId);

    /**
     * 分页查询用户消息列表
     *
     * @param page 分页参数
     * @param receiverUserId 接收用户ID
     * @return 消息分页列表
     */
    IPage<SysMessageEntity> queryMessagePage(IPage<SysMessageEntity> page, Long receiverUserId);

    /**
     * 查询用户未读消息列表
     *
     * @param receiverUserId 接收用户ID
     * @return 未读消息列表
     */
    List<SysMessageEntity> queryUnreadMessageList(Long receiverUserId);

    /**
     * 发送消息
     * 支持设置跳转链接，用户点击消息时可跳转到指定页面
     *
     * @param message 消息实体
     * @return 是否发送成功
     */
    boolean sendMessage(SysMessageEntity message);

    /**
     * 批量发送消息
     *
     * @param messages 消息实体列表
     * @return 是否发送成功
     */
    boolean sendBatchMessage(List<SysMessageEntity> messages);

    /**
     * 标记消息为已读
     *
     * @param messageId 消息ID
     * @param receiverUserId 接收用户ID
     * @return 是否标记成功
     */
    boolean markAsRead(Long messageId, Long receiverUserId);

    /**
     * 批量标记消息为已读
     *
     * @param messageIds 消息ID列表
     * @param receiverUserId 接收用户ID
     * @return 是否标记成功
     */
    boolean markBatchAsRead(List<Long> messageIds, Long receiverUserId);

    /**
     * 删除消息
     *
     * @param messageId 消息ID
     * @param receiverUserId 接收用户ID
     * @return 是否删除成功
     */
    boolean deleteMessage(Long messageId, Long receiverUserId);

    /**
     * 批量删除消息
     *
     * @param messageIds 消息ID列表
     * @param receiverUserId 接收用户ID
     * @return 是否删除成功
     */
    boolean deleteBatchMessage(List<Long> messageIds, Long receiverUserId);
}